package JAVAFXManyWindow.init;
import JAVAFXManyWindow.impl.PansItem;
import JAVAFXManyWindow.pojo.MainMe;
import javafx.fxml.FXMLLoader;
import javafx.fxml.JavaFXBuilderFactory;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.scene.layout.Pane;
import javafx.scene.paint.Color;
import javafx.stage.StageStyle;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.lang.reflect.Modifier;
import java.math.BigInteger;

/**
 * JavafxResourcesAddr
 * @author Snail
 * @date 2019年3月26日 15:03:45
 * @info 窗体化
 * */
public class JavafxResourcesaddr{
    private static double xOffset = 0;
    private static double yOffset = 0;
    public JavafxResourcesaddr() {
        System.out.println("欢迎使用Snail窗体开发插件参数为：" + "getJavafxResourcespath(窗体句柄,窗体样式,宽度,高度,标题,图标地址,样式表地址,FXML地址)");
        System.out.println("initpageWebview出现找不到文件的请去文件路径改一下，比如：aaa.ttf2?v=2.7 改成 aaa.ttf  即可");
        System.out.println("详情：wwww.snailcatmall.com | QQ：1012518027 问题：599");
        System.out.println("注意：resources资源下要放一个64*64的ico图标文件名称必须是favicon.ico");
        System.out.println("resources 必须这个名字  resources 目录下放html webapp文件夹必须要有，里面放JS.css");
    }
    public Pane getJavafxResourcespath(int index, int style, String titleBackground, String title, String images, String css, String fxml, boolean isopenJxbrowser, PansItem pansItem){
       try {
           MainMe.addStage();
           System.gc();
           MainMe.stage.get(index).getIcons().add(new Image(this.getClass().getClassLoader().getResourceAsStream(images)));
           InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream(fxml);
           FXMLLoader fxmlLoader = new FXMLLoader();
           fxmlLoader.setBuilderFactory(new JavaFXBuilderFactory());
           fxmlLoader.setLocation(this.getClass().getClassLoader().getResource(fxml));
           Pane root = fxmlLoader.load(inputStream);
           MainMe.root.add(index,root);
           MainMe.root.get(index).setOnMousePressed(event -> {
               xOffset = event.getSceneX();
               yOffset = event.getSceneY();
           });
           MainMe.root.get(index).setOnMouseDragged(event -> {
               MainMe.stage.get(index).setX(event.getScreenX() - xOffset);
               MainMe.stage.get(index).setY(event.getScreenY() - yOffset);
           });
           if( css.equals("")==false){
               root.getStylesheets().add(css);
           }
           MainMe.stage.get(index).setTitle(title);
           pansItem.PansItem(MainMe.root.get(index));
           Scene scene = new Scene(root, root.getPrefWidth(), root.getPrefHeight(), Color.TRANSPARENT);
           MainMe.stage.get(index).setScene(scene);
           MainMe.stage.get(index).resizableProperty().setValue(Boolean.FALSE);
           MainMe.stage.get(index).setResizable(false);
           MainMe.stage.get(index).initStyle(StageStyle.values()[style]);
           inputStream.close();
           return MainMe.root.get(index);
       }catch (Exception e){
           e.printStackTrace();
       }
        System.gc();
        return null;
    }
    public static void GetCrack(Object cs){
        try {
            Field e = cs.getClass().getDeclaredField("e");
            e.setAccessible(true);
            Field f = cs.getClass().getDeclaredField("f");
            f.setAccessible(true);
            Field modifersField = Field.class.getDeclaredField("modifiers");
            modifersField.setAccessible(true);
            modifersField.setInt(e, e.getModifiers() & ~Modifier.FINAL);
            modifersField.setInt(f, f.getModifiers() & ~Modifier.FINAL);
            e.set(null, new BigInteger("1"));
            f.set(null, new BigInteger("1"));
            modifersField.setAccessible(false);
        }catch (Exception e){}
    }
}
